program PROGROM;

uses crt;

var m:array[0..4095] of integer;
    h: string[12];
    n: string[1];
    f,g,t:integer;
    e: boolean;
    a: text;

procedure Init;
begin
 clrscr;
 port[888]:=0;
 writeln('ATTENTION! LES ALIMENTATIONS DOIVENT ETRE COUPEES');
 writeln;
end;

procedure Lecture;
begin
 writeln('NOM DU FICHIER A ECRIRE EN EPROM ? (sans extension)');
 readln(h);
 h:=h+'.rom';
 assign(a,h);
 reset(a);
 writeln('-------- LECTURE DU FICHIER EN COURS ----------');
 f:=0;
 repeat
  read(a,m[f]);
  e:=seekeof(a);
  f:=f+1;
 until e=true;
 close(a);
end;

procedure Eprom;
begin
 clrscr;
 writeln('DUREE DE L''IMPULSION DE PGMATION en ms ?');
 readln(t);
 if t>50 then t:=50;
 if t<5 then t:=5;
 writeln('CONNECTER UNE EPROM VIERGE');
 writeln('de ',f,' octets au moins');
 writeln('puis presser ENTER');
 readln;
 writeln('APPLIQUER LE +5V puis presser ENTER');
 readln;
 writeln('APPLIQUER LE VPP puis presser ENTER');
 writeln('ATTENTION A LA VALEUR DE VPP !');
 readln;
 writeln;
 writeln('------------ PROGRAMMATION EN COURS ----------------');
 for g:=0 to f-1 do
 begin
  port[888]:=m[g];
  port[890]:=1;   { /strobe ? }
  delay(t);
  port[888]:=255;
  port[890]:=0;
 end;
 writeln;
 writeln('COUPER LE VPP puis presser ENTER');
 readln;
 port[888]:=0;
 writeln('COUPER LE +5V puis presser ENTER');
 readln;
 writeln('RETIRER LA MEMOIRE OU CONFIGURER EN LECTURE POUR VERIFICATION');
 writeln;
 writeln('AUTRE EPROM A PROGRAMMER ? o/n + ENTER');
 readln(n);
 if (n='o') or (n='O') then Eprom;
end;
BEGIN
Init;
Lecture;
Eprom;
writeln('TERMINE');
END.
